const fs = require('fs')
const FTLE_PATH = './b.json'

//查找所有学生
function findAll(callback){
    fs.readFile(FTLE_PATH,'utf8',(err,data)=>{
        if (err) {
           return callback(err)
        }
        callback(null,JSON.parse(data).students)
    })
}

//通过ID查找一个学生
function findStudentById(id,callback){
    fs.readFile(FTLE_PATH,'utf8',(err,data)=>{
        if (err) {
            return callback(err)
        }
        data = JSON.parse(data)
        let student = data.students.find(item=>{
            return item.id === id
        })
        callback(null,student)
    })
}

//添加学生
function addStudent(student,callback){
    fs.readFile(FTLE_PATH,'utf8',(err,data)=>{
        if (err) {
            return callback(err)
        }
        //把json字符串，转换成json对象
        data = JSON.parse(data)
        //获取数据最后一个对象，并且把它的id+1，得到一个新的id
        let id = data.students[data.students.length - 1].id + 1
        //把字符串类型学生，转换成对象类型学生
        let s = JSON.parse(student)
        // 动态的给学生添加一个id属性
        s.id = id
        // 把传递过来的学生对象，追加到数组末尾
        data.students.push(s)
        // 把新数组，重新写回到文件内
        fs.writeFile(FTLE_PATH,JSON.stringify(data),(err)=>{
            if(err){
                return callback(err)
            }
            callback(null)
        })
    })
}

//删除学生
function deleStudentById(id,callback){
    fs.readFile(FTLE_PATH,'utf8',(err,data)=>{
        if (err) {
            return callback(err)
        }
        data = JSON.parse(data)
        // 获取指定对象在数组里面的下标
        let index = data.students.findIndex(item=>{
            return item.id === id
        })
        // 删除指定的对象
        data.students.splice(index,1)
        // 把删完之后的数据重写文件内
        fs.writeFile(FTLE_PATH,JSON.stringify(data),(err)=>{
            if (err) {
                return callback(err)
            }
            callback(null)
        })
    })
}

//更新学生信息
function updateStudent(student,callback){
    fs.readFile(FTLE_PATH,'utf8',(err,data)=>{
        if (err) {
            return callback(err)
        }
        // 把传递过来的字符串，转换成对象
        student = JSON.parse(student)
        data = JSON.parse(data)
        // 查找指定对象
        let stu = data.students.find(item=>{
            return item.id === student.id
        })
        for (const key in student){
            stu[key] = student[key]
        }
        // 把删完之后的数据重写回文件内
        fs.writeFile(FTLE_PATH,JSON.stringify(data),(err)=>{
            if (err) {
                return callback(err)
            }
            callback(null)
        })
    })
}

exports.findAll = findAll
exports.findStudentById = findStudentById
exports.addStudent = addStudent
exports.deleStudentById = deleStudentById
exports.updateStudent = updateStudent